http 请求与相应

首先说一下访问web依次会用到什么协议



## DNS->TCP->HTTP->IP->ARP

  1. 浏览器输入网址 baidu.com

  2. DNS 域名解析 浏览器根据域名解析IP地址

DNS有2中查询方式:递归、迭代,可以分别表示为:

域名解析原理:

1>一个域中的每个主机名与其IP地址的映射关系由这个域的DNS服务器负责管理,例如,”www.it.org”、“ftp.it.org”、“blog.it.org”等主机名都由管理域“it.org”的DNS服务器进行管理,而不能由管理域“org”的DNS服务器进行管理。

2>每个管理域都必须在其直接父域的DNS服务器上注册该子域的名称和该子域的DNS服务器的IP地址,例如,必须在管理域“org”的DNS服务器注册子域“it.org”和其DNS服务器的IP地址后,域名“it.org”才能真正被外界所认可。

3>为了方便对顶级域名的统一管理,在顶级域名之上其实还有一个根域名,根域名用点(.)表示,例如,“www.it.org”也可以写为“www.it.org.”,“www.it.org.”中的最后的那个点(.)就表示根域名。 Internet中的根域名由InterNIC(国际互联网络信息中心)集中管理,顶级域名和其下的域名则由拥有该域名的组织、公司和个人自己管理。

  1. 浏览器与web服务器建立一个TCP 面向连接 双向 可靠 字节流

三次握手与四次断开

所谓三次握手(Three-way Handshake),是指建立一个 TCP 连接时,需要客户端和服务器总共发送3个包。

三次握手的目的是连接服务器指定端口,建立 TCP 连接,并同步连接双方的序列号和确认号,交换 TCP 窗口大小信息。在 socket 编程中,客户端执行 connect() 时。将触发三次握手。

握手

TCP 的连接的拆除需要发送四个包,因此称为四次挥手(Four-way handshake),也叫做改进的三次握手。客户端或服务器均可主动发起挥手动作,在 socket 编程中,任何一方执行 close() 操作即可产生挥手操作。

  1. HTTP 报文

浏览器向web服务器发送一个http请求



POST /search HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint,
application/msword, application/x-silverlight, application/x-shockwave-flash, /
Referer: <a href=”http://www.google.cn/">http://www.google.cn/</a&gt;
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; TheWorld)
Host: <a href=”http://www.google.cn">www.google.cn</a&gt;
Connection: Keep-Alive
Cookie: PREF=ID=80a06da87be9ae3c:U=f7167333e2c3b714:NW=1:TM=1261551909:LM=1261551917:S=ybYcq2wpfefs4V9g;
NID=31=ojj8d-IygaEtSxLgaJmqSjVhCspkviJrB6omjamNrSm8lZhKy_yMfO2M4QMRKcH1g0iQv9u-2hfBW7bUFwVh7pGaRUb0RnHcJU37y-
FxlRugatx63JLv7CWMD6UB_O_r

hl=zh-CN&source=hp&q=domety
`
### 请求头部:由关键字/值对组成,每行一对,关键字和值用英文冒号”:“分隔。请求头部通知服务器有关于客户端请求的信息,典型的请求头有:

<div>
<pre>`User-Agent:产生请求的浏览器类型。

Accept:客户端可识别的内容类型列表。星号 “ * ” 用于按范围将类型分组,用 “ */* ” 指示可接受全部类型,用“ type/* ”指示可接受 type 类型的所有子类型。

Host:要请求的主机名,允许多个域名同处一个IP地址,即虚拟主机。

Accept-Language:客户端可接受的自然语言。

Accept-Encoding:客户端可接受的编码压缩格式。

Accept-Charset:可接受的应答的字符集。

connection:连接方式(close 或 keepalive)。

Cookie:存储于客户端扩展字段,向同一域名的服务端发送属于该域的cookie。

IP

  1. 用于网络层,提供点到点的服务
  2. 通常划分为A、B、C、D 4类地址快
  3. 广播和多播仅用于UDP(TCP是面向连接的)。
  4. 网络好、子网号、主机号 16+8+8

APR

  1. 主机在发送帧前将目标IP地址转换成目标MAC地址的过程

5. 服务器的永久重定向访问

  • HTTP是无连接无状态
  • 服务器给浏览器响应一个301永久重定向响应,这样浏览器就会访问“http://www.facebook.com/” 而非“http://facebook.com/”
  • 这样就会把访问带www的和不带www的地址归到同一个网站排名下。还有就是用不同的地址会造成缓存友好性变差,当一个页面有好几个名字时,它可能会在缓存里出现好几次。
  • 常用状态码

6. 浏览器跟踪重定向地址

  • 现在浏览器知道了 “HTTP://www.facebook.com/”才是要访问的正确地址,所以它会发送另一个http请求。

7. 服务器处理请求

服务器接收到请求后,确定执行某一请求处理来处理它,执行后台代码,并访问数据库。连通前台生成一个HTML来进行相应请求

8. 服务器向浏览器发回一个HTML相应

  1. 返回时,执行发送时的步骤进行查找

9.释放TCP 连接(4步)

10. 浏览器解析HTML内容

  1. 解析文本并显示

11. 浏览器获取嵌入在HTML中的对象

  1. 会注意到需要获取其他地址内容的标签
  2. 浏览器会在DNS中查找这些域名,发送请求,重定向等等…

12. 浏览器渲染HTML页面

 

参考: http://blog.csdn.net/lzghxjt/article/details/51458540

https://hit-alibaba.github.io/interview/basic/network/HTTP.html

文章目录
  1. 1. 浏览器输入网址 baidu.com
  2. 2. DNS 域名解析 浏览器根据域名解析IP地址
    1. 2.1. DNS有2中查询方式:递归、迭代,可以分别表示为:
    2. 2.2. 域名解析原理:
  3. 3. 浏览器与web服务器建立一个TCP 面向连接 双向 可靠 字节流
    1. 3.1. 三次握手与四次断开
  4. 4. HTTP 报文
  5. 5. 浏览器向web服务器发送一个http请求
  6. 6. IP
  7. 7. APR
  8. 8. 5. 服务器的永久重定向访问
  9. 9. 6. 浏览器跟踪重定向地址
  10. 10. 7. 服务器处理请求
  11. 11. 8. 服务器向浏览器发回一个HTML相应
  12. 12. 9.释放TCP 连接(4步)
  13. 13. 10. 浏览器解析HTML内容
  14. 14. 11. 浏览器获取嵌入在HTML中的对象
  15. 15. 12. 浏览器渲染HTML页面
|